Jump to content
  • 0

об Ajax


alexandr_v-vich
 Share

Question

Вопрос такой. Дело в том, что ни раз натыкался на предложения типа

С помощью Ajax(/XMLHttpRequest) можно подгружать контент на сайте

Но, вот, когда я делал, в своё время, этот Ajax, у меня ничего не вышло, поскольку я запрашивал и получал конкретную страницу, а вытащить из неё какой-либо элемент я не мог и выкручивался там уже ситуативно, и ужасно некрасиво (с т.з. кода), наверное. Получал я страницу, если ничего не путаю, через „responseText“. А там, по-моему, есть ещё „responseXML“, и вот с помощью него можно вытаскивать элементы, но мне этот XML ни разу нигде не нужен. А в моём случае (как понимаю, более распространённом) работать приходится только с цельной страницей-ответом.

Вот ту цитату, что привёл, встречаю постоянно, а объяснений/примеров нигде так ни разу и не встретил…

Мне В общем-то не хочется разбираться в ситуации досконально, писать больше я ничего не буду, но знать как оно работает или как может работать, я думаю, мне нужно. Даже хотя бы в идеи, без примеров, объясните, пожалуйста, возможно всё же это и, если так, то по какому принципу реализовывается оно?

Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0

Ну вот например

  uploadPhoto: (event) =>
picture = @jWebcamResultArea[0].toDataURL()
url = jButton.data("upload-url")
xhr = $.ajaxSettings.xhr()
$.ajax(
url: url
xhr: -> xhr
type: "POST"
data: { photo: picture, _method: "put" }
).success (response, data) =>
@options.parentWidget.insertItem response['item']
false

why u no read api??

Edited by xeLL
Link to comment
Share on other sites

  • 0

xeLL, эмм…, а можно несколько вопросов. Я просто в теме совсем немного, потому:

1. Что такое „$“?

2. Что такое „ajaxSettings“?

3. Что эта за запись „@jWebcamResultArea[0].toDataURL()“?

Вообще-то я по-моему чуть ли ни одной строчки не понял, но думаю ответы хотя бы на озвученное мне кое-что даст

Да, вопросы, наверное, очень простейшие, прям ну совсем. Только я очень ситуативно js-проблемы/задачи решаю, потому и не знаю многих основ… т.е. я просто не знаю основ))

why u no read api??

Ну, большую часть от сюда черпал — http://xmlhttprequest.ru/. Или вы про что?

Link to comment
Share on other sites

  • 0

Для подгрузки HTML-контента нужно использовать не XMLHttpRequest, а iframe

Опаньки… а я думал, что фрейм вымер и им больше никто и нигде не пользуется, хотя когда я интересовался почему же оно так, чёткого ответа не получал, но за неимением других точек зрения даже и не стал его изучать и смотреть чего он может или не может…

И там же дело какое. В определённый момент у меня получалось (я уверен, что повторить это труда не составит) подгружать всю страницу, которую я запрашиваю в определённый div. Хотя, по-моему, это делается обычным

div.innerHtml = xhr.responseText

вроде выглядело оно так…

И поскольку у меня выходила страница, которая в одном теге имеет другую страницу, пришлось изменить на полную подмену

body.innerHtml = xhr.responseText

и с таким уже работал. И это, В общем-то, и есть проблема))

Но, вот, первый случай — разве логика не iframe`овская? Только нам придётся не всю страницу, а отдельно писать iframe`овские страницы. И в этом случае, мне казалось, куча проблем есть. Ну там с адресом, с поиск. оптимизацией… нет?

И я же делал, там, с этим, с history вкупе.

Т.е. у меня были чисто цельные страницы, без разбитых на части контентов, которые следует подгружать. Т.е. если я так разобью, мне и iframe не нужен ни разу. У меня задача стояла, чтобы из полученной с помощью XMLHttpRequest ответа-страницы вытащить нужный мне элемент (div там или чего ещё), а остальное оставить то, что есть сейчас на страницы. Т.е. типа подменить часть контента.

Как в моей ситуации (опять же, думаю, самой распространённой) поможет iframe?

А, ну и лучше, наверное так… если выбор стоит всё же между iframe и XMLHttpRequest, то мне нужно второе. Просто эта(!) тема интересует. Ведь самая первая цитата, которую я привёл в первом посте была связана с AJAX. А это, думаю, скорее XMLHttpRequest, нежели iframe…

Edited by alexandr_v-vich
Link to comment
Share on other sites

  • 0

А зачем аяксом получать именно всю страницу целиком? Получай только ту часть, которую тебе нужно. На сервере нужно иметь скрипт, который обрабатывает запросы, не надо запрашивать html-файлы полностью.

  • Like 1
Link to comment
Share on other sites

  • 0

Опаньки… а я думал, что фрейм вымер и им больше никто и нигде не пользуется, хотя когда я интересовался почему же оно так, чёткого ответа не получал, но за неимением других точек зрения даже и не стал его изучать и смотреть чего он может или не может…

Все ajax-плагины к jQuery используют iframe для аплоада файлов.

gmail использует iframe'ы.

Потому что

1. Native history

2. Есть стандартная индикация загрузки данных у браузера

3. Можно работать с множеством типов данных, не только с текстом

Т.е. у меня были чисто цельные страницы, без разбитых на части контентов, которые следует подгружать.

Как в моей ситуации (опять же, думаю, самой распространённой) поможет iframe?

Посмотрите на http://cs.iptcom.net

  • Like 1
Link to comment
Share on other sites

  • 0
На сервере нужно иметь скрипт

Этого я не умею, Int

s0rr0w, да, убедительно) Только iframe отдельная, походу, тема, я эту то разбираю ради кругозора, а туда я уж точно не залезу =/

Посмотрите на http://cs.iptcom.net

не открывается :(

И всё же я настаиваю на XMLHttpRequest, ведь это же, по-моему и есть почти весь AJAX, ну какбы его главная составляющая. И именно про ajax я наслышан, что это возможно (часть контента).

И раз ссылка так и не открывается, что интересно — для iframe`a же всё-таки нужно иметь отдельную часть, именно которую и будем загружать, да? Или нет? Вот, что тут интересно. Если да, то нафига он мне нужен. Если нет, то как это вытащить из страницы нужную часть и как этому может поспособствовать iframe (вот видимо по ссылке и есть ответ)) )?

Link to comment
Share on other sites

  • 0

И раз ссылка так и не открывается, что интересно — для iframe`a же всё-таки нужно иметь отдельную часть, именно которую и будем загружать, да? Или нет? Вот, что тут интересно. Если да, то нафига он мне нужен. Если нет, то как это вытащить из страницы нужную часть и как этому может поспособствовать iframe (вот видимо по ссылке и есть ответ)) )?

Самая главная проблема - определить, кто именно отвечает за "нужную часть" и могут ли загружаться разные части одной страницы.

Как это устроено в упрощенной схеме

1. iframe располагается за пределами экрана, например с position: absolute; top: -1000px;. Ему присваивается имя, например "proxyFrame"

2. Ссылкам присваивается target="proxyFrame" и при нажатии будет загружен контент в наш проксифрейм

3. По окончанию загрузки дочерней страницы нам нужно проверить, мы загружены во фрейме или нет. Если во фрейме, то идем дальше, иначе прекращаем работу скрипта

4. Находим нужный нам контент в дочерней странице и присваиваем его innerHTML какому-то контейнеру в родительском документе.

Как узнать, куда именно загружать контент? Можно по клику на ссылку фрейму записывать какой-то параметр со ссылкой или на id, или на конкретную ноду, в которую нужно вставить контент. Тут уже по вкусу.

Какие есть проблемы? С одним проксифреймом все запросы должны быть строго последовательными. Избавиться от этого можно путем генерации для каждой ссылки своего собственного проксифрема.

  • Like 1
Link to comment
Share on other sites

  • 0

Ну вроде идею понял…

И, по-моему, да, именно так я в своё время и решил поступать, только использовать такой принцип не приходилось. Смущало меня главное — у нас всегда будет висеть какбы 2 страницы. Одна скрытая, откуда мы вытаскиваем контент, другая, собственно, которая отображается. Это же должно повлиять на скорость, там, и всё такое?

С одной стороны то, конечно, зашибись, если мы будем, как ты говоришь, последовательно переходить по ссылкам — скорость чумовая))) Но, довольно редкая ситуация. А так, получается, мы сначала грузим страницу отдельно, и только затем оттуда вытаскиваем, что нужно, долго, не? В смысле нагрузки…

И вопрос, вроде как остался :D . Мне то хотелось из получаемого ответа, выдергнуть нужное, ну или как-то запросить из всей страницы нужное, не знаю, что-то в этом духе. Что-то чухаю, всё-таки так просто не решается это)

Ну и я так не и понял))) Зачем iframe? Чего бы не грузить также страницы не во фрейм, а в тот же див, спрятанный на -1000px? Или это какбы не существенно?

Link to comment
Share on other sites

  • 0

Смущало меня главное — у нас всегда будет висеть какбы 2 страницы.

Так можно после загрузки фрейму src="about:blank" присваивать

Это же должно повлиять на скорость, там, и всё такое?

Теоретически, да.

А так, получается, мы сначала грузим страницу отдельно, и только затем оттуда вытаскиваем, что нужно, долго, не? В смысле нагрузки…

Про кешировани не забываем.

И вопрос, вроде как остался :D . Мне то хотелось из получаемого ответа, выдергнуть нужное, ну или как-то запросить из всей страницы нужное, не знаю, что-то в этом духе. Что-то чухаю, всё-таки так просто не решается это)

Не понял проблему.

Ну и я так не и понял))) Зачем iframe? Чего бы не грузить также страницы не во фрейм, а в тот же див, спрятанный на -1000px? Или это какбы не существенно?

Как загрузить данные в div?

  • Like 1
Link to comment
Share on other sites

  • 0
Не понял проблему.
Как загрузить данные в div?

Чувствую, я упускаю какой-то момент, не пойму какой.

Как в 5ом посте писал

div.innerHtml = xhr.responseText

Или что тут не так? С фреймом иначе?

Так можно после загрузки фрейму src="about:blank" присваивать

А вот этого я не понял. Точнее я не знаю, что это может дать. Что это может дать?)) Всмысле, я интересовался по причине именно скорости, нагрузки, что, вот, 2 страницы. Или ещё есть ньюансы с этим?

Аааа… ааа… всё, понял, понял, что упускаю —

target="proxyFrame"

Т.е.… всё понял. Понял, почему ты разделил XMLHttpRequest и фреймы)

Логику подгрузки контента, которую, вот ты описал, можно же и с этим и с этим реализовать. И когда я прочитал этот пост, подумал в первую очередь про свой XHR))) И думаю, что причём здесь фреймы.

Так, понял. Тогда, возвращаясь…, а ладно, не куда не возвращаясь) Понял, всё, спасибо, s0rr0w :)

Link to comment
Share on other sites

  • 0

xeLL, эмм…, а можно несколько вопросов. Я просто в теме совсем немного, потому:

1. Что такое „$“?

2. Что такое „ajaxSettings“?

3. Что эта за запись „@jWebcamResultArea[0].toDataURL()“?

Вообще-то я по-моему чуть ли ни одной строчки не понял, но думаю ответы хотя бы на озвученное мне кое-что даст

Да, вопросы, наверное, очень простейшие, прям ну совсем. Только я очень ситуативно js-проблемы/задачи решаю, потому и не знаю многих основ… т.е. я просто не знаю основ))

это был приведен пример работы с ajax через jQuery, что является одним из наиболее простых вариантов использования ajax

изучать здесь http://api.jquery.com/jQuery.ajax/ или сильно упрощенная версия http://anton.shevchuk.name/javascript/jquery-for-beginners-ajax/ и http://codething.ru/ajax.php

  • Like 1
Link to comment
Share on other sites

  • 0

NeoXidizer, спасибо тебе, что разъяснил. Я не пользуюсь jQuery. Да и вопрос общий такой был, логика важна была, принцип, т.е. как запрашивать или как правильно получать ответ страницы, чтобы вытащить часть из неё. Тут то вон еле-еле понял, что к чему, а что там jQuery мутит я точно не разбиру))

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy